Add patch from upstream to fix intermittent FTBFS on some filesystems
authorSimon McVittie <smcv@debian.org>
Mon, 26 Apr 2021 09:14:13 +0000 (10:14 +0100)
committerSimon McVittie <smcv@debian.org>
Mon, 26 Apr 2021 09:14:13 +0000 (10:14 +0100)
debian/patches/series
debian/patches/tests-Test-without-a-cache-directory-by-default.patch [new file with mode: 0644]

index e0991715b1af2542bdea546b63742c04d2d7a3be..b98bee5f3bc4e4ad85d3b10b03d64643fe31a60d 100644 (file)
@@ -1,2 +1,3 @@
 libtest-On-failure-make-it-clearer-what-has-happened.patch
+tests-Test-without-a-cache-directory-by-default.patch
 debian/Skip-test-pull-repeated-during-CI.patch
diff --git a/debian/patches/tests-Test-without-a-cache-directory-by-default.patch b/debian/patches/tests-Test-without-a-cache-directory-by-default.patch
new file mode 100644 (file)
index 0000000..35b52d4
--- /dev/null
@@ -0,0 +1,101 @@
+From: Dan Nicholson <dbn@endlessos.org>
+Date: Mon, 19 Apr 2021 11:00:20 -0600
+Subject: tests: Test without a cache directory by default
+
+Several tests generate summaries and then expect to use the generated
+summary immediately. However, this can cause intermittent test failures
+when they inadvertantly get a cached summary file. This typically
+happens when the test is run on a filesystem that doesn't support user
+extended attributes. In that case, the caching code can only use the
+last modified time, which only has 1 second granularity. If tests don't
+carefully manage the summary modification times or the repo cache then
+they are likely subject to races in some test environments.
+
+This introduces an environment variable `OSTREE_SKIP_CACHE` that
+prevents the repo from using a cache directory. This is enabled by
+default in tests and disabled for tests that are a explicitly trying to
+test the caching behavior.
+
+Bug: https://github.com/ostreedev/ostree/issues/2313
+Bug: https://github.com/ostreedev/ostree/issues/2351
+Forwarded: https://github.com/ostreedev/ostree/pull/2352
+Applied-upstream: 2021.3, commit:e660855796a40ad417d13cbe081bd62e56a1c6f5
+---
+ src/libostree/ostree-repo.c        | 2 +-
+ tests/libtest.sh                   | 5 +++++
+ tests/test-pull-summary-caching.sh | 3 +++
+ tests/test-pull-summary-sigs.sh    | 3 +++
+ tests/test-signed-pull-summary.sh  | 3 +++
+ 5 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
+index b2347b4..76b0248 100644
+--- a/src/libostree/ostree-repo.c
++++ b/src/libostree/ostree-repo.c
+@@ -3291,7 +3291,7 @@ ostree_repo_open (OstreeRepo    *self,
+   if (!glnx_opendirat (self->repo_dir_fd, "tmp", TRUE, &self->tmp_dir_fd, error))
+     return FALSE;
+-  if (self->writable)
++  if (self->writable && getenv ("OSTREE_SKIP_CACHE") == NULL)
+     {
+       if (!glnx_shutil_mkdir_p_at (self->tmp_dir_fd, _OSTREE_CACHE_DIR, DEFAULT_DIRECTORY_MODE, cancellable, error))
+         return FALSE;
+diff --git a/tests/libtest.sh b/tests/libtest.sh
+index 2e9a99d..40f362b 100755
+--- a/tests/libtest.sh
++++ b/tests/libtest.sh
+@@ -86,6 +86,11 @@ unset TAR_OPTIONS
+ # easily clean up.
+ export OSTREE_SYSROOT_DEBUG=mutable-deployments
++# By default, don't use a cache directory since it makes the tests racy.
++# Tests that are explicitly testing the cache operation should unset
++# this.
++export OSTREE_SKIP_CACHE=1
++
+ export TEST_GPG_KEYID_1="7FCA23D8472CDAFA"
+ export TEST_GPG_KEYFPR_1="5E65DE75AB1C501862D476347FCA23D8472CDAFA"
+ export TEST_GPG_KEYID_2="D8228CFECA950D41"
+diff --git a/tests/test-pull-summary-caching.sh b/tests/test-pull-summary-caching.sh
+index 9671199..37c2aed 100755
+--- a/tests/test-pull-summary-caching.sh
++++ b/tests/test-pull-summary-caching.sh
+@@ -31,6 +31,9 @@ if ! has_gpgme; then
+     exit 0
+ fi
++# Ensure repo caching is in use.
++unset OSTREE_SKIP_CACHE
++
+ COMMIT_SIGN="--gpg-homedir=${TEST_GPG_KEYHOME} --gpg-sign=${TEST_GPG_KEYID_1}"
+ echo "1..1"
+diff --git a/tests/test-pull-summary-sigs.sh b/tests/test-pull-summary-sigs.sh
+index 3819cbf..04a8e48 100755
+--- a/tests/test-pull-summary-sigs.sh
++++ b/tests/test-pull-summary-sigs.sh
+@@ -23,6 +23,9 @@ set -euo pipefail
+ . $(dirname $0)/libtest.sh
++# Ensure repo caching is in use.
++unset OSTREE_SKIP_CACHE
++
+ COMMIT_SIGN=""
+ if has_gpgme; then
+     COMMIT_SIGN="--gpg-homedir=${TEST_GPG_KEYHOME} --gpg-sign=${TEST_GPG_KEYID_1}"
+diff --git a/tests/test-signed-pull-summary.sh b/tests/test-signed-pull-summary.sh
+index e953f2e..3d46869 100755
+--- a/tests/test-signed-pull-summary.sh
++++ b/tests/test-signed-pull-summary.sh
+@@ -27,6 +27,9 @@ set -euo pipefail
+ echo "1..14"
++# Ensure repo caching is in use.
++unset OSTREE_SKIP_CACHE
++
+ # This is explicitly opt in for testing
+ export OSTREE_DUMMY_SIGN_ENABLED=1